home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / BOOTUP / !Boot / Boot / !OpenDir / Code < prev    next >
Text File  |  1991-07-01  |  7KB  |  279 lines

  1. REM >!RunImage
  2.  
  3. REM     !OpenDir V1.0
  4. REM  © Jeremy Lee  29-6-91
  5. REM  Freeware.. Share and Enjoy!
  6.  
  7. ON ERROR SYS "Wimp_ReportError",FNerrblk(ERR,REPORT$),1,"OpenDir":SYS "Wimp_CloseDown":END
  8.  
  9. DIM block% &100     : REM  Misc. block
  10. DIM errblock% &100  : REM  Error block
  11. DIM iconblock% 100  : REM  Icon block
  12. DIM name$(7)        : REM List of names
  13.  
  14. quitted%=FALSE      : REM  And we haven't quitted
  15. windowopen%=FALSE   : REM  Window isn't open initially
  16.  
  17. SYS "Wimp_Initialise",200,&4B534154,"OpenDir"
  18.  
  19. PROCloadsprites     : REM  Load sprites into memory
  20. PROCinstallicon     : REM  Install icon on desktop
  21. PROCloadtemplates   : REM  Load templates in
  22. PROCbuildmenus      : REM  Build menus
  23. PROCicondata        : REM Clear the Icon Data
  24.     
  25. PROCclearlist
  26.  
  27. REPEAT
  28.   SYS "Wimp_Poll",%100011,block% TO reason%
  29.   CASE reason% OF
  30.     WHEN 2     : PROCopenwindow
  31.     WHEN 3     : PROCcloseewindow
  32.     WHEN 4     : SYS "Wimp_SetCaretPosition",-1
  33.     WHEN 6     : PROCprocess_mouse
  34.     WHEN 7     : PROCdecode_drag
  35.     WHEN 9     : PROCprocess_menu
  36.     WHEN 17,18 : PROCprocess_message
  37.   ENDCASE
  38. UNTIL quitted%
  39. SYS "Wimp_CloseDown"
  40. END
  41.  
  42. DEFPROCloadtemplates
  43.   DIM mainblock% 3000
  44.   DIM infoblock% 500
  45.   DIM saveblock% 500
  46.   maxws%=3000
  47.   DIM ws% maxws%
  48.   wsend%=ws%+maxws%
  49.   ows%=ws%
  50.   SYS "Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
  51.   SYS "Wimp_LoadTemplate",,mainblock%,ws%,wsend%,-1,"Main",0 TO ,,ws%
  52.   SYS "Wimp_CreateWindow",,mainblock% TO mainwindow%
  53.   SYS "Wimp_LoadTemplate",,infoblock%,ws%,wsend%,-1,"Info",0 TO ,,ws%
  54.   SYS "Wimp_CreateWindow",,infoblock% TO infowindow%
  55.   SYS "Wimp_LoadTemplate",,saveblock%,ws%,wsend%,-1,"Save",0 TO ,,ws%
  56.   SYS "Wimp_CreateWindow",,saveblock% TO savewindow%
  57.   SYS "Wimp_CloseTemplate"
  58. ENDPROC
  59.  
  60. DEFPROCfirstopen
  61.   IF windowopen% ENDPROC
  62.   !block%=mainwindow%
  63.   block%!4=!mainblock%
  64.   block%!8=mainblock%!4
  65.   block%!12=mainblock%!8
  66.   block%!16=mainblock%!12
  67.   block%!28=-1
  68.   PROCopenwindow
  69. ENDPROC
  70.  
  71. DEFPROCopenwindow
  72.   SYS "Wimp_OpenWindow",,block%
  73.   windowopen%=TRUE
  74. ENDPROC
  75.  
  76. DEFPROCcloseewindow
  77.   SYS "Wimp_CloseWindow",,block%
  78.   windowopen%=FALSE
  79. ENDPROC
  80.  
  81. DEFPROCinstallicon
  82.   !iconblock%=-1
  83.   iconblock%!4=0
  84.   iconblock%!8=0
  85.   iconblock%!12=100
  86.   iconblock%!16=100
  87.   iconblock%!20=&3002
  88.   $(iconblock%+24)="!opendir":SYS"Wimp_CreateIcon",,iconblock% TO iconbar%
  89. ENDPROC
  90.  
  91. DEFPROCbuildmenus
  92.   DIM mainmenu% 28+3*24
  93.   $mainmenu%   = "Menu"
  94.   mainmenu%?12 = 7
  95.   mainmenu%?13 = 2
  96.   mainmenu%?14 = 7
  97.   mainmenu%?15 = 0
  98.   mainmenu%!16 = LEN"XXXXX"*16+12
  99.   mainmenu%!20 = 44
  100.   mainmenu%!24 = 0
  101.   mainmenu%!28 = 0
  102.   mainmenu%!32 = infowindow%
  103.   mainmenu%!36 = &07000001
  104.   $(mainmenu%+40)="Info"
  105.   mainmenu%!52 = 0
  106.   mainmenu%!56 = savewindow%
  107.   mainmenu%!60 = &07000001
  108.   $(mainmenu%+64)="Save"
  109.   mainmenu%!76 = &80
  110.   mainmenu%!80 = -1
  111.   mainmenu%!84 = &07000001
  112.   $(mainmenu%+88)="Quit"
  113. ENDPROC
  114.  
  115. DEFFNerrblk(err%,report$)
  116.   !errblock%=err%
  117.   $(errblock%+4)=report$+" at line "+STR$ERL
  118.   errblock%?(4+LEN$(errblock%+4))=0
  119. =errblock%
  120.  
  121. DEFPROCprocess_mouse
  122. CASE block%!12 OF
  123.   WHEN -2 
  124.     IF block%!16=iconbar%
  125.       CASE block%!8 OF
  126.         WHEN 1,4 : PROCfirstopen
  127.         WHEN   2 : SYS "Wimp_CreateMenu",,mainmenu%,!block%-mainmenu%!16/2-24,186
  128.         ENDCASE
  129.       ENDIF
  130.   WHEN mainwindow%
  131.     CASE block%!8 OF
  132.       WHEN 1,4
  133.         CASE block%!16 OF
  134.           WHEN 0 : PROCdragicon(!block%,block%!4,mainwindow%,0):drag%=1
  135.           WHEN 1 : PROCclearlist:SYS"Wimp_ForceRedraw",mainwindow%,-1000,-1000,1000,1000
  136.           ENDCASE
  137.       WHEN 2   : SYS "Wimp_CreateMenu",,mainmenu%,!block%-mainmenu%!16/2-24,block%!4
  138.       ENDCASE
  139.   WHEN savewindow%
  140.     IF block%!16=0 THEN PROCdragicon(!block%,block%!4,savewindow%,0):drag%=2
  141.   ENDCASE
  142. ENDPROC
  143.  
  144. DEFPROCprocess_menu
  145.   IF !block% = 2 THEN quitted%=TRUE
  146. ENDPROC
  147.  
  148. DEFPROCprocess_message
  149.   CASE block%!16 OF
  150.     WHEN   0 : quitted%=TRUE
  151.     WHEN   2 : name$=FNstring(block%+44)
  152.       CASE drag% OF
  153.         WHEN 1
  154.           PROCaddname(name$)
  155.         WHEN 2
  156.           PROCsave(name$)
  157.         ENDCASE
  158.     WHEN   3 : file$=FNstring(block%+44):PROCdragged_file
  159.   ENDCASE
  160. ENDPROC
  161.  
  162. DEFFNstring(from%)
  163.  LOCAL n$:WHILE?from%:n$+=CHR$?from%:from%+=1:ENDWHILE
  164. =n$
  165.  
  166. DEFPROCloadsprites
  167. *Iconsprites <Obey$Dir>.Sprites
  168. ENDPROC
  169.  
  170. DEFPROCaltericon(icon%,text$)
  171.   $(iconptr%(icon%))=text$
  172.   name$(icon%)=text$
  173. ENDPROC
  174.  
  175. DEFPROCicondata
  176.   DIM iconptr%(7)
  177.   ptr%=ows%
  178.   looking=ASC("1"):WHILE ?ptr%<>looking:ptr%+=1:ENDWHILE
  179.   FOR x%=0TO7
  180.     iconptr%(x%)=ptr%+x%*255
  181.   NEXT
  182. ENDPROC
  183.  
  184. DEFPROCclearlist
  185.   FORx%=0TO7
  186.     PROCaltericon(x%,"")
  187.     name$(x%)=""
  188.   NEXT
  189.   nextname%=0
  190. ENDPROC
  191.  
  192. DEFPROCdragicon(mousex%,mousey%,handle%,icon%)
  193. LOCAL bx%,by%,ix0%,ix1%,iy0%,iy1%
  194. block%!0 = 4
  195. block%!4 = 5
  196. block%!8 = 11
  197. block%!12= 12
  198. block%!16= -1
  199. SYS"OS_ReadVduVariables",block%,block%+20
  200. dx%=1<<(block%!20)
  201. dy%=1<<(block%!24)
  202. scrx1%=(block%!28+1)*dx%
  203. scry1%=(block%!32+1)*dy%
  204. savewind%=handle%
  205. !block%=handle%:SYS"Wimp_GetWindowState",,block%
  206. bx%=block%!4 - block%!20
  207. by%=block%!16 - block%!24
  208. !block%=handle%:block%!4=icon%:SYS"Wimp_GetIconState",,block%
  209. ix0%=block%!8
  210. iy0%=block%!12
  211. ix1%=block%!16
  212. iy1%=block%!20
  213. !block%=handle%
  214. block%!4=5
  215. block%!8=bx%+ix0%
  216. block%!12=by%+iy0%
  217. block%!16=bx%+ix1%
  218. block%!20=by%+iy1%
  219. block%!24=block%!8-mousex%
  220. block%!28=block%!12-mousey%
  221. block%!32=scrx1%+block%!16-mousex%
  222. block%!36=scry1%+block%!20-mousey%
  223. SYS"Wimp_DragBox",,block%
  224. ENDPROC
  225.  
  226. DEFPROCdecode_drag
  227. LOCAL window%,icon%
  228.  SYS "Wimp_GetPointerInfo",,block%:window%=block%!12:icon%=block%!16
  229.  IF window% <> -1 THEN
  230.   block%!12=0:block%!16=1:block%!20=window%:block%!24=icon%:block%!28=block%!0:block%!32=block%!4
  231.   block%!36=1:block%!40=0:$(block%+44)="x"+CHR$0:block%!0=56
  232.   SYS "Wimp_SendMessage",17,block%,window%,icon%
  233.  ENDIF
  234. ENDPROC
  235.  
  236. DEFPROCaddname(name$)
  237. IF RIGHT$(name$,2)=".x" THEN
  238.   name$=LEFT$(name$,LEN(name$)-2)
  239.   IF nextname%<8 THEN
  240.     name$(nextname%)=name$
  241.     PROCaltericon(nextname%,name$)
  242.     nextname%+=1
  243.     IF windowopen% THEN
  244.       SYS"Wimp_ForceRedraw",mainwindow%,-1000,-1000,1000,1000
  245.     ENDIF
  246.   ENDIF
  247. ENDIF
  248. ENDPROC
  249.  
  250. DEFPROCsave(where$)
  251. IF RIGHT$(where$,2)=".x" THEN where$=LEFT$(where$,LEN(where$)-1)
  252. LOCAL name$
  253. block%!0=savewindow%
  254. block%!4=1
  255. SYS"Wimp_GetIconState",,block%
  256. name$=$(block%+28)
  257. fullpath$=where$+name$
  258. IF where$<>"<Wimp$Scrap>" THEN
  259.   channel%=OPENOUT(fullpath$)
  260.   FOR x%=0TO7
  261.     IF name$(x%)<>"" THEN
  262.       BPUT# channel%,"Set Alias$Temp Filer_OpenDir "+name$(x%)
  263.       BPUT# channel%,13
  264.       BPUT# channel%,"Temp"
  265.       BPUT# channel%,13
  266.     ENDIF
  267.   NEXT
  268.   CLOSE# channel%
  269.   OSCLI"SetType "+fullpath$+" 101"
  270. ENDIF
  271. block%!0=savewindow%
  272. SYS"Wimp_CloseWindow",,block%
  273. ENDPROC
  274.  
  275. DEFPROCdragged_file
  276.  
  277. ENDPROC
  278.  
  279.